# softmax函数的实现
import numpy as np

def softmax(a):
    '''直接计算softmax函数'''
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y

def softmax_stable(a):
    '''稳定softmax函数'''
    c = np.max(a)
    exp_a = np.exp(a - c)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y

# 测试softmax函数
a = np.array([1, 2, 3])
print(softmax(a), sum(softmax(a)))
print(softmax_stable(a), sum(softmax_stable(a)))